简易的Java版 eval()函数

您所在的位置:网站首页 java exec函数 exp 简易的Java版 eval()函数

简易的Java版 eval()函数

2024-07-12 05:24| 来源: 网络整理| 查看: 265

 代码说明:

1.允许直接使用,如下:

public class EvalTest { public static void main(String[] args) { String code = "int a = 1;" + "int b = 2;" + "System.out.println(a+b);"; Eval eval = new Eval(code); eval.compiler(); eval.run(); } }

 结果如下:

   3为a+b之后的结果

 

2.允许包含主类,如下:

public class EvalTest { public static void main(String[] args) { final StringBuilder code = new StringBuilder(); code.append("public class Hello {"); code.append("public static void main(String [] args){"); code.append("System.out.println(\"Hello World!\");"); code.append(" }"); code.append("}"); Eval eval = new Eval(code.toString()); eval.compiler(); eval.run(); } }

结果:

请注意,主类必须位于所有其他类的前面!!!

 

3.允许指定某目录下的Java文件直接运行,如下:

public class EvalTest { public static void main(String[] args) { Eval eval = new Eval("D:/Java/IDEAProject/ReviewJavaBasics/target/classes/","Test181.java"); eval.compiler(); eval.run(); } }

Test181.java内容如下:

import java.io.*; import java.nio.charset.Charset; import java.util.Scanner; public class Test181 { public static void main(String[] args) { new Test181().test1(); } private void test1() { Runtime runtime = Runtime.getRuntime(); try { Process process = runtime.exec("ping www.baidu.com"); process.waitFor(); try (Scanner scanner = new Scanner(process.getInputStream(), Charset.forName("GBK"));) { while (scanner.hasNext()) { System.out.println(scanner.nextLine()); } } } catch (IOException | InterruptedException e) { e.printStackTrace(); } } }

结果:

注意:

在EvalTest中的 Eval eval = new Eval(路径,文件名);

文件名允许指定非java文件,作为输入源,测试如下:

public class EvalTest { public static void main(String[] args) { Eval eval = new Eval("D:/Java/IDEAProject/ReviewJavaBasics/target/classes/","zhw.txt"); eval.compiler(); eval.run(); } }

zhw.txt

工作目录:

运行结果:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3